package kotlincore.chapt03.主从构造方法

import org.joda.time.DateTime
import org.joda.time.Years
/*
* 1,通过constructor方法定义了一个新的构造方法
* 2，每个从构造方法由两部分组成。一部分是对其他构造方法的委托，
*    另一部分是由花括号包裹的代码块。执行顺序上会先执行委托的方法
*    ，然后执行自身代码块的逻辑。
* 通过this关键字来调用 要委托的构造方法。如果一个类存在主构造方法，那么每个从构造方法都
* 要直接或间接地委托给它。比如，可以把从构造方法A委托给从构造方法B，再将从构造方法B委托给
* 主构造方法
* */
class Bird(age:Int) {
    val age: Int

    init {
        this.age = age
    }
    constructor(timestap: Long) : this(DateTime(timestap)) //构造函数A
    constructor(birth: DateTime) : this(getAgeByBirth(birth)) //构造函数B
}

fun getAgeByBirth(birth: DateTime):Int{
    return Years.yearsBetween(birth,DateTime.now()).years
}

fun main(){
    val bird = Bird(2)
    println(bird.age)
    val datatime = DateTime("2021-01-02")
    val bird2 = Bird(datatime)
    println(bird2.age)

    val bird3 = Bird(1615675277000)
    println(bird3.age)
}